草庐IT

CountDownLatch和ExecutorService 线程池cachedThreadPool.submit

全部标签

java - Java中的线程安全全局变量

我正在尝试了解java中的线程安全机制,我需要一些帮助。我有一个类:publicclassThreadSafe{privateExecutorexecutor=newScheduledThreadPoolExecutor(5);privatelongvalue=0;publicvoidmethod(){synchronized(this){System.out.println(Thread.currentThread());this.value++;}}privatesynchronizedlonggetValue(){returnthis.value;}publicstaticvoi

java - 在Java中,线程切换可以发生在synchronized block 中吗?

我了解同步块(synchronizedblock)或方法将阻塞所有线程,直到其中的线程“离开”为止。我想知道,当线程在同步块(synchronizedblock)内执行时,是否会发生上下文切换?以我的理解,它不应该。谢谢! 最佳答案 cancontextswitchinghappenwhenthreadisexecutinginsidesynchronizedblock?是的,上下文切换也可以发生在synchronizedblock内。唯一不同的是,没有其他线程能够进入相同的synchronizedblock(或同一对象上的任何其他

java - EntityManager 真的是线程安全的吗?

我这里说的是基本用法:@StatelesspublicclassBookServiceBeanimplementsBookService{@PersistenceContextEntityManagerem;publicvoidcreate(Bookbook){this.em.persist(book);}}谷歌搜索上述问题,StackOverflow说yes,butno-接受的答案是肯定的,但跟进的是否;Spring.io说bothyesandno,而AdamBien似乎是JavaEE专家,给出了一个unqualifiedyes.我自己使用简单调度bean的经验表明答案是否定的:@S

java - 如何使用 ConcurrentHashMap 执行线程安全的获取然后删除?

在一次采访中,我被要求检查以下代码是否按预期工作。ConcurrentHashMapchm=newConcurrentHashMap();if(chm.get(key)!=null){chm.get(key).doSomething();chm.remove(key);}根据JavaDocs,get返回最后完成的更新操作的值。因此,如果线程1已经调用了chm.remove(key)并且如果线程2进入了if语句并且即将调用get方法,那么我们可能会得到一个异常。这是正确的吗?我怎样才能使这个线程安全? 最佳答案 Map.remove(

java - 多线程中的 AtomicInteger

我想找出从0到1000000的所有质数。为此我写了这个愚蠢的方法:publicstaticbooleanisPrime(intn){for(inti=2;i这对我来说很好,而且不需要任何编辑。比我写了下面的代码:privatestaticExecutorServiceexecutor=Executors.newFixedThreadPool(10);privatestaticAtomicIntegercounter=newAtomicInteger(0);privatestaticAtomicIntegernumbers=newAtomicInteger(0);publicstatic

java - 两个ExecutorServices可以共享一个线程池吗?

我有一组记录要处理,处理可以并行进行,所以我创建了一个ExecutorService(通过Executors#newCachedThreadPool())。单个记录的处理本身由可并行化的步骤组成,因此我想使用另一个ExecutorService。有没有一种简单的方法可以让这个新的使用相同的底层线程池?它甚至是可取的吗?谢谢。 最佳答案 回答您的问题:不,两个ExecutorService对象不能共享一个线程池。但是,您可以在对象之间共享一个ExecutorService,或者根据需要创建多个Executor,但不太推荐这样做。最佳解

java - 为什么线程 "main"java.lang.NoClassDefFoundError :? 中出现异常

我通过Eclipse运行我的软件。昨天一切都很好。我没有更改代码,但今天,当我尝试再次运行它时,我收到以下错误消息:Exceptioninthread"main"java.lang.NoClassDefFoundError:coloredtrails/CTListenerattest.DemoPlayer1.createAndShowGUI(DemoPlayer1.java:23)attest.DemoPlayer1.main(DemoPlayer1.java:39)Causedby:java.lang.ClassNotFoundException:coloredtrails.CTLi

java - 将参数传递给 Java 线程

Threadt=newThread(newRunnable(){publicvoidrun(){}});我想用这种方式创建一个线程。如果可能,如何将参数传递给run方法?编辑:为了使我的问题更具体,请考虑以下代码段:for(inti=0;i根据Jon的回答,它不会起作用,因为i没有声明为final。 最佳答案 不,run方法从来没有任何参数。您需要将初始状态放入Runnable。如果您使用的是匿名内部类,则可以通过final局部变量来实现:finalintfoo=10;//OrwhateverThreadt=newThread(ne

Java停止线程从类运行的所有线程

我需要做的是能够停止从一个实现可运行的线程类运行的所有线程。这就是我的意思:这是我的“线程”类的开始:publicclassHTTPextendsThread{intthreadNumber;Stringhost;intport;inttimeLeft;privateBufferedReaderLocalBufferedReader;publicHTTP(intthreadNumber,Stringhost,intport,inttimeLeft){this.threadNumber=threadNumber;this.host=host;this.port=port;this.tim

java - java中的Executor服务-->如何将单线程代码转换为使用executor

如果这个问题听起来很愚蠢,请原谅我——我才刚刚开始使用Executor。我有一个以这种方式使用线程的现有Java应用程序——基本上使用独立线程——privateThreadspawnThread(){Threadt=newThread(){StringtaskSnap=task.toString();publicvoidrun(){try{println(task.run(null));}catch(InterruptedExceptione){println("ITC-"+taskSnap+"interrupted");}}};returnt;}从上面可以看出,该函数返回一个新线程。